﻿// B.Make it Increasing - 1667A.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
/*
B - https://codeforces.com/problemset/problem/1667/A

题意
给定一个长度为n的数组a，现在有一个长度为n初始全为0的数组b。

每次操作可以选择一个下标i，并使得
bi+=ai 或 bi−=ai。

问最少操作多少次可以使得数组b严格升序。

思路
这道题最重要的一点是数据范围只有5000，于是支持
O(n^2)的做法。

为了使得数组
b严格升序，那么肯定是存在某个点k，
[1,k]区间都是做减法操作，
[k+1,n]都做加法操作，
kin[0,n]。

我们设一个数组c，表示操作情况，例如
Ci=3表示进行了3次
bi+=ai，同样的，
ci=−5表示进行了
5次bi−=ai。

那么这个c数组中就必然存在一个0。



给你一个由 n 个正整数组成的数组 a 和一个长度为 n 的数组 b。

在一次移动中，你可以选择一个整数 i (1≤i≤n)，并将 ai 加到 bi 或从 bi 中减去 ai。要使 b 成递增数（即每个元素都严格大于它之前的每个元素），最少需要走多少步？

输入
第一行包含一个整数 n（2≤n≤5000）。

第二行包含 n 个整数 a1, a2, ..., an (1≤ai≤109) - 数组 a 的元素。

输出
打印一个整数，即使 b 增加。



Examples
InputCopy
5
1 2 3 4 5
OutputCopy
4
InputCopy
7
1 2 1 2 1 2 1
OutputCopy
10
InputCopy
8
1 8 2 7 3 6 4 5
OutputCopy
16

注释
例 1：可以从 b1 中减去 a1，然后将 a3、a4 和 a5 分别加到 b3、b4 和 b5 中。经过 4 次移动后，最终数组为 [-1, 0, 3, 4, 5]。

例 2: 你可以在 10 步之内得到 [-3，-2，-1，0，1，2，3]。

*/

#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include <cstring>


using namespace std;

const int N = 5010;
long long a[N], b[N], n;
long long  ans;

void solve(int x) {
	long long cnt = 0;
	memset(b, 0, sizeof b);
	for (int i = x - 1; i >= 0; i--) {
		long long add = abs(b[i + 1] / a[i]) + 1;
		cnt += add;
		b[i] = -(a[i] * add);
	}
	for (int i = x + 1; i < n; i++) {
		long long add = b[i - 1] / a[i] + 1;
		cnt += add;
		b[i] = a[i] * add;
	}

	ans = min(ans, cnt);
}


int main()
{
	//cin >> n;
	scanf("%d",&n);
	ans = 0x3f3f3f3f3f3f3f3f;
	for (int i = 0; i < n; i++) {
		//cin >> a[i];
		scanf("%lld",&a[i]);
	}
	for (int i = 0; i < n; i++) {
		solve(i);
	}
	//cout << ans << endl;
	printf("%lld\n", ans);
}

